<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Dispose and Reimport Test</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- Import maps polyfill -->
    <!-- Remove this when import maps will be widely supported -->
    <script async src="https://unpkg.com/es-module-shims@1.6.3/dist/es-module-shims.js"></script>

    <script type="importmap">
    {
        "imports": {
          "threepipe": "./../../dist/index.mjs"
        }
    }

    </script>
    <style id="example-style">
        html, body, #canvas-container, #mcanvas {
            width: 100%;
            height: 100%;
            margin: 0;
            overflow: hidden;
        }
    </style>
    <script type="module" src="../examples-utils/global-loading.mjs"></script>
    <script type="module" src="../examples-utils/simple-code-preview.mjs"></script>
    <script id="example-script" type="module">
        import {_testFinish, _testStart, ThreeViewer, timeout} from 'threepipe'

        const viewer = new ThreeViewer({canvas: document.getElementById('mcanvas')})

        async function init(loadAsFile = true) {
            const url = 'https://samples.threepipe.org/minimal/DamagedHelmet/glTF/DamagedHelmet.gltf'
            let file
            if(loadAsFile){
                file = new File([await (await fetch(url)).blob()], url)
            }
            const load = async ()=> {
                return viewer.load(file ?? url, {
                    autoCenter: true,
                    autoScale: true,
                })
            }

            await viewer.setEnvironmentMap('https://samples.threepipe.org/minimal/venice_sunset_1k.hdr')
            viewer.scene.background = viewer.scene.environment
            const model = await load()
            console.log(model.uuid)
            await timeout(500)
            viewer.scene.clearSceneModels(false)
            await timeout(500)
            const model2 = await load()
            console.log(model2.uuid)
            if(model !== model2) throw new Error('Error in Test - Models should be the same after clearing scene models');
            await timeout(500)
            viewer.scene.disposeSceneModels()
            await timeout(500)
            // readd model2 which is disposed
            viewer.addSceneObject(model2)
            await timeout(500)
            viewer.scene.disposeSceneModels()
            await timeout(500)
            const model3 = await load()
            console.log(model3.uuid)
            if(model2 === model3) throw new Error('Error in Test - Models should not be the same after disposing scene models');
            await timeout(500)
            viewer.scene.disposeSceneModels()
            await timeout(500)
            viewer.scene.addObject(model.translateX(-0.5)) // add back cleared model
            viewer.scene.addObject(model2.translateX(-0.5)) // again, shouldn't change anything
            viewer.scene.addObject(model3.translateX(1)) // add back disposed model
            await timeout(1000)
            viewer.scene.disposeSceneModels()
        }

        _testStart()
        init(false).then(()=>init(true)).finally(_testFinish)
    </script>
</head>
<body>
<div id="canvas-container">
    <canvas id="mcanvas"></canvas>
</div>

</body>
